home *** CD-ROM | disk | FTP | other *** search
- /*
- * Copyright (c) 1980 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that this notice is preserved and that due credit is given
- * to the University of California at Berkeley. The name of the University
- * may not be used to endorse or promote products derived from this
- * software without specific prior written permission. This software
- * is provided ``as is'' without express or implied warranty.
- */
-
- #ifndef lint
- static char sccsid[] = "@(#)tutor.c 5.2 (Berkeley) 2/16/88";
- #endif /* not lint */
-
- #include "back.h"
- #include "tutor.h"
-
- extern int maxmoves;
- extern char *finis[];
-
- extern struct situatn test[];
-
- static char better[] = "That is a legal move, but there is a better one.\n";
-
- tutor () {
- register int i, j;
-
- i = 0;
- begscr = 18;
- cturn = -1;
- home = 0;
- bar = 25;
- inptr = &in[0];
- inopp = &in[1];
- offptr = &off[0];
- offopp = &off[1];
- Colorptr = &color[0];
- colorptr = &color[2];
- colen = 5;
- wrboard();
-
- while (1) {
- if (! brdeq(test[i].brd,board)) {
- if (tflag && curr == 23)
- curmove (18,0);
- writel (better);
- nexturn();
- movback (mvlim);
- if (tflag) {
- refresh();
- clrest ();
- }
- if ((! tflag) || curr == 19) {
- proll();
- writec ('\t');
- }
- else
- curmove (curr > 19? curr-2: curr+4,25);
- getmove();
- if (cturn == 0)
- leave();
- continue;
- }
- if (tflag)
- curmove (18,0);
- text (*test[i].com);
- if (! tflag)
- writec ('\n');
- if (i == maxmoves)
- break;
- D0 = test[i].roll1;
- D1 = test[i].roll2;
- d0 = 0;
- mvlim = 0;
- for (j = 0; j < 4; j++) {
- if (test[i].mp[j] == test[i].mg[j])
- break;
- p[j] = test[i].mp[j];
- g[j] = test[i].mg[j];
- mvlim++;
- }
- if (mvlim)
- for (j = 0; j < mvlim; j++)
- if (makmove(j))
- writel ("AARGH!!!\n");
- if (tflag)
- refresh();
- nexturn();
- D0 = test[i].new1;
- D1 = test[i].new2;
- d0 = 0;
- i++;
- mvlim = movallow();
- if (mvlim) {
- if (tflag)
- clrest();
- proll();
- writec('\t');
- getmove();
- if (tflag)
- refresh();
- if (cturn == 0)
- leave();
- }
- }
- leave();
- }
-
- clrest () {
- register int r, c, j;
-
- r = curr;
- c = curc;
- for (j = r+1; j < 24; j++) {
- curmove (j,0);
- cline();
- }
- curmove (r,c);
- }
-
- brdeq (b1,b2)
- register int *b1, *b2;
-
- {
- register int *e;
-
- e = b1+26;
- while (b1 < e)
- if (*b1++ != *b2++)
- return(0);
- return(1);
- }
-